直线拟合

您所在的位置:网站首页 matlab 直线拟合 直线拟合

直线拟合

2023-04-11 11:53| 来源: 网络整理| 查看: 265

最小二乘

都知道一条直线可以表达成 y=bx+a形式,其中b为斜率,a为截距。最小二乘就是对n个点进行拟合,使其距离拟合直线的总体误差尽量小。求解方法也很简单,就是最小化每个点到直线的垂直误差。1、建立方差误差

2、求导得参数

缺点:

1、无法拟合垂直线,且由于误差采用的是垂直误差,导致越接近垂直线,拟合效果越差。

2、对噪声的鲁棒性不好,受噪声影响较大。

一种方式是在拟合直线过后,选择距离直线较近的点进行重新拟合,如此多次后就能得到较好结果,实际就是逐步求精的过程。

一种改善方式是引入Total least squares,如下图:

霍夫变换

相比于最小二乘的由点找参数方法。

霍夫变化的思想是由参数统计点数(这个思想才是最重要的,一般思维都是类似最小二乘,但在多条线段中使用最小二乘就困难了,因为没办法确定哪些点属于那条线,霍夫变换创造性换个思路,既然我知道需要哪些参数和参数范围,何不使用统计思想,这样就不需要知道每个点的所属,直接把所有点在所有可能线上统计一遍。),而且它不仅可以用于拟合直线,还可以拟合其他的曲线、圆等。

如:

直线Hough变换的(k,b)空间方法:

如果知道很多N个边缘点(x0 ,y0)……(xn-1,yn-1),检测其中是否有直线。假设有直线且该直线的方程为y=kx+b,则0=kx0+b,y1=kx1+b,……,yn-1=kxn-1+b同时满足。若构造一个计数器 count[k][b],则有count[k][b]=n。问题就变成求k、b和多少个点落到该直线y=kx+b上。寻找count中的最大值,则该最大值对应的(k,b)即为最佳直线的参数。

但在k,b空间中存在的同样问题:斜率k范围太大(无穷大),无法确定。

除了标准的笛卡尔坐标系外,还有一种常用坐标系是极坐标。

霍夫变换可以使用极坐标系来表示直线。

显然穷举(ρ,θ)远比(k, b)直观,其范围[ρ1, ρ2]和[θ1,θ2]也容易确定。

计算方法是首先生成ρ(代表直线到原点的垂直距离),θ(代表x轴到直线垂线的角度)的可能取值,

然后将所有点代入公式,

如果计算结果小于阈值,则认为该点为当前ρ、θ取值投了一票。

最终选择票数高的作为拟合的直线。

缺点:

1、生成ρ、θ的间距不好确定。精确性取决于step θ和step ρ ,显然它们越小,精确度越高。 但越小,count[ρ][θ]越不容易形成峰值。

2、受噪声影响。

3、坐标原点的选择,ρ和θ的定义域的确定需要考究

其他策略:

1、可先用较粗的θ和ρ进行 Hough变换,筛选出候选点,再对候选点进行直线拟和,得到更精细的直线描述。

2、可先对边缘图像进行膨胀后,相当于把边缘点的精度降低,再进行Hough变换。

3、进行某种加权的Hough变换:count[ρ][θ]+=L长度加权,长度平方加权,加梯度加权,灰度加权

从相似点考虑,Hough变换和最小二乘法都是常见的直线检测、直线拟合方式之一,他们都是从一些点里,找到能够拟合这些点最好的直线。

不同点呢:

1、最小二乘法是统计学方法,常用于数据统计和数值分析方面,

而Hough变换则是传统的图像处理方法,是从二维的图像入手的。

2、最小二乘法拟合的是一条直线,其他图形,特别是曲线效果不理想;

而Hough变换则可以从很多个点中,找到很多条直线(也可以很有效的找别的图形,这也是区别之一)。

3、最小二乘法会用到所有的点,也就是说对噪声很敏感,它拟合出来的直线并不会穿过所有的点,改变其中一个点的位置,会对结果造成影响(所以有了改进的RANSAC);

而Hough变换则更多是“检测”直线,是检测出图像中在一同条直线上最多的点,检测出来的直线,必定会穿过所有相关的点,并且噪点几乎不会对Hough变换造成任何影响。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3